package cn.itcast.nems.base.api;

import cn.itcast.ic.common.bean.Page;
import cn.itcast.nems.base.dto.ClazzDTO;
import cn.itcast.nems.base.dto.ClazzQueryDTO;
import cn.itcast.nems.common.PageQueryModel;

import java.util.List;
import java.util.Set;

public interface ClazzApi {

    /**
     * 锁定班级，被锁定班级里的学员不允许进出，如：办理结课中的班级，不能再向该班报名、转入学员等
     *
     * @param clazzId 班级ID
     */
    void lock(int clazzId);

    /**
     * 解锁班级
     *
     * @param clazzId 班级ID
     */
    void unlock(int clazzId);

    /**
     * 班级信息分页查询
     *
     * @param queryParams 查询条件
     * @return 分页数据
     */
    Page<ClazzDTO> queryPageList(PageQueryModel<ClazzQueryDTO> queryParams);

    /**
     * 根据班级ID获取班级详情
     *
     * @param classId 班级ID
     * @return 班级详情
     */
    default ClazzDTO queryByClassId(Integer classId) {
        PageQueryModel<ClazzQueryDTO> queryParams = new PageQueryModel<>();
        queryParams.convert();
        ClazzQueryDTO condition = new ClazzQueryDTO();
        condition.setClassIds(List.of(classId));
        condition.setIncludeWaitDeleted(Boolean.TRUE);
        queryParams.setCondition(condition);
        Page<ClazzDTO> result = this.queryPageList(queryParams);
        if (null != result.getRecords() && result.getRecords().size() > 0) {
            return result.getRecords().get(0);
        }
        return null;
    }

    /**
     * 获取 EMS 班级列表
     * @param clazzQueryDTO 查询参数
     * @param month 从前几个月开始的班级
     * @param includeGraduation  是否包含已经毕业的班级
     * @return 班级列表
     */
    List<?> findClassByParam(ClazzQueryDTO clazzQueryDTO, Integer month , Boolean includeGraduation);


    List<ClazzDTO> findClazzes(Set<Integer> idList);

    Boolean isLive(Integer clazzId);
}
